package com.ckr.controller;

import com.ckr.common.lang.Result;
import com.ckr.entity.User;
import com.ckr.service.UserService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author ShadowCkr
 * @since 2022-02-05
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;

    @RequiresAuthentication
    @GetMapping("/{id}")
    public Result getUserById(@PathVariable("id") Long id) {
        User user = userService.getById(id);
        return Result.success(user);
    }

    /*
     * 实体校验
     * @RequestBody主要用来接收前端传递给后端的json字符串中的数据(请求体中的数据)。
     * GET方式无请求体，所以使用@RequestBody接收数据时，前端不能使用GET方式提交数据，而是用POST方式进行提交。
     * 在后端的同一个接收方法里，@RequestBody与@RequestParam()可以同时使用，
     * @RequestBody最多只能有一个，而@RequestParam()可以有多个。
     * @Validated用于检查user中填写的规则，如果不满足则抛出异常。
     * 可以在GlobalExceptionHandler全局异常处理中捕获此异常，并进行自定义返回数据信息。
     */
    @PostMapping("/save")
    public Result save(@Validated @RequestBody User user) {
        return Result.success(user);
    }
}
